/// /接口的声明和使用
// 1、找到页面的需要对应哪个接口
// 2、问后端的同事找后端或者看接口文档如果没有接口文档自己mock(模拟接口)
// 3、看接口 接口地址 接口的请求方式 接口携带的参数接口返回的数据
// 4、在api中封装接口返回一个request方法在方法中配置接口的接口地址接口的请求方式接口携带的参数（有什么配置什么，没有可以省略不写）
// 5、在合适的位置调用接口

// 浏览器请求的查看
// 重点关注最左侧的红色小按钮（录制）如果发现请求之后一个接口都没有说明录制没开
// 重点关注小漏斗中的筛选里面是否有过滤条件如果有将他清掉
// 重点关注no throttling将网络状态关掉
// 拿到接口之后怎么查看
// 点击接口就可以进入接口详情
// 重点关注标头headers载荷payload预览preview
// 1、如果接口是404说明接口没有找卧重点看一下标头中的Request URL和接口文档中的是否一致
// 2、如果返回的状态码不是404也不是580多的大概率是接口传参传错重点看【载荷】中的传参和【预览】中的错误返回与接口文档对照
// 3、接口返回状态码是50O多的需要检查一下【标头】中的Request Method请求的方法是否和接口文档一致
// 后端服务如果真的挂了，需要及时和后端说
import store from '../store'
import request from '../utils/request'
export * from './login'
// 获取频道列表
// 不强制用户登录，匿名用户返回后台设置的默认频道列表
// 如果用户登录需要携带token一起发起请求
// 请求头用户Token，未登录用户为空
// http://localhost:8000/v1_0/user/channels
export const userChannelListAPI = () => {
  return request({
    url: '/v1_0/user/channels',
    headers: {
      Authorization: 'Bearer ' + store.state.token
    }
  })
}
export const allChannelListAPI = () => {
  return request({
    url: '/v1_0/channels',
    headers: {
      Authorization: 'Bearer ' + store.state.token
    }
  })
}

// 获取新闻列表
// pre_timestamp--请求前一页历史数据的时间戳
export const articlesListAPI = ({ channelId, timestamp }) => {
  return request({
    url: '/v1_0/articles',
    params: {
      channel_id: channelId, // 对应频道的id，拿到对应频道的内容渲染在页面数据
      // 兼容性写法 保证当前的timestamp 没有值的时候能取到后面的(new Date()).getTime()
      // 防止请求参数缺失 接口报错
      timestamp: timestamp || (new Date()).getTime()// 时间戳，请求新的推荐数据传当前的时间戳，请求历史推荐传指定的时间戳
    }
  })
}

// 对文字不兴趣接口
// target:不喜欢的文章id
export const articleDislikeAPI = ({ target }) => {
  return request({
    url: 'v1_0/article/dislikes',
    method: 'POST',
    data: {
      target: target
    }
  })
}

// 举报文章
// 举报类型： 0-其他问题，1-标题夸张，2-低俗色情，3-错别字多，
// 4-旧闻重复，5-广告软文，6-内容不实，7-涉嫌违法犯罪，8-侵权'
export const articleReporstsAPI = ({ target, type, remark }) => {
  return request({
    url: '/v1_0/article/reports',
    method: 'POST',
    data: {
      target: target,
      type: type,
      remark: remark
    }
  })
}

// 5.设置用户的频道（重置式）
export const updataChannelListAPI = ({ channels }) => {
  return request({
    url: '/v1_0/user/channels',
    method: 'PUT',
    data: {
      channels
    }

  })
}

// 6. 搜索 - 联想菜单
export const suggestListAPI = ({ q }) => {
  return request({
    url: '/v1_0/suggestion',
    params: {
      q: q
    }
  })
}
// 7.结果页获取搜索结果
export const searchResultListAPI = ({ q, page }) => {
  return request({
    url: '/v1_0/search',
    params: {
      q: q,
      page: page
    }
  })
}

// 8.获取新闻详情
// /v1_0/articles/:article_id
/// / :id是后台规定的参数名
// 前端要在对应路径位置传值(不要写:)
// 文章 - 详情
export const articleDetailAPI = ({ id }) => {
  return request({
    url: `/v1_0/articles/${id}`
  })
}

// 文章 - 关注作者
export const followedUserAPI = ({ target }) => {
  return request({
    url: '/v1_0/user/followings',
    method: 'POST',
    data: {
      target: target
    }
  })
}
// 文章 - 取消关注作者
export const unFollowedUserAPI = ({ uid }) => {
  return request({
    // 这uid只是个变量名, 把值拼接在url发给后台(无需指定参数名)
    url: `/v1_0/user/followings/${uid}`,
    method: 'DELETE'
  })
}

// 文章 - 点赞
export const articleLikeAPI = ({ target }) => {
  return request({
    url: '/v1_0/article/likings',
    method: 'POST',
    data: {
      target: target
    }
  })
}

// 文章 - 取消点赞
export const articleDisLikeAPI = ({ artId }) => {
  return request({
    url: `/v1_0/article/likings/${artId}`,
    method: 'DELETE'
  })
}

// 评论 - 获取列表
// offset第一页时, 不用在params携带(axios发现值为null会自动忽略此参数)
// type:评论类型，a-对文章(article)的评论，c-对评论(comment)的回复
// source：源id，文章id或评论id
// offset：获取评论数据的偏移量，值为评论id，表示从此id的数据向后取，不传表示从第一页开始读取数据
// 本次返回结果的最后一个评论id，作为请求下一页数据的offset参数，若本次无具体数据，则值为NULL
// limit:获取的评论数据个数，不传表示采用后端服务设定的默认每页数据量
export const commentListAPI = ({ source, offset = null, limit = 10 }) => {
  return request({
    url: '/v1_0/comments',
    params: {
      type: 'a',
      source: source,
      offset,
      limit
    }
  })
}

// 评论 - 喜欢
export const commentLikingAPI = ({ comId }) => {
  return request({
    url: '/v1_0/comment/likings',
    method: 'POST',
    data: {
      target: comId
    }
  })
}
// 评论-取消喜欢
export const commentDisLikingAPI = ({ comId }) => {
  return request({
    url: `/v1_0/comment/likings/${comId}`,
    method: 'DELETE'
  })
}

// 评论 - 发布
// target:评论的目标id（评论文章即为文章id，对评论进行回复则为评论id）
// content：评论内容
export const sendCommentAPI = ({ artId, content }) => {
  return request({
    url: '/v1_0/comments',
    method: 'POST',
    data: {
      target: artId,
      content: content
    }
  })
}

// 用户 - 基本资料
export const userInfoAPI = () => {
  return request({
    url: '/v1_0/user'
  })
}
// 用户-获取用户个人资料
export const userProfileAPI = () => {
  return request({
    url: '/v1_0/user/profile'
  })
}

// 编辑用户照片资料（头像、身份证照片）
// 通过数据结构 构造对象的传参方式key:value叫做application/json的content-type
// 通过将文件对象直接传入的方式传参 叫做multipart/form-data传参数
// 当浏览器检测到传入参数是formdata的格式时，会自动的将content-type转换为multipart/form-data
export const updatePhotoAPI = (formObj) => {
  return request({
    url: '/v1_0/user/photo',
    method: 'PATCH',
    data: formObj
  })
}

// 用户 - 更新资料--更新用户名和生日
export const updateProfileAPI = ({ birthday, userName }) => {
  return request({
    url: '/v1_0/user/profile',
    method: 'PATCH',
    data: {
      birthday: birthday,
      name: userName
    }
  })
}

/// v1_0/authorizations
// 刷新用户token
export const RefreshTokenApI = () => {
  return request({
    url: '/v1_0/authorizations',
    method: 'PUT',
    headers: { // 请求头需要携带刷新的token
      Authorization: `Bearer ${store.state.refresh_token}`
    }
  })
}
